/*
 * Copyright 2004-2005 asoft
 * 本软件及其所有拷贝的名称，与光盘上或本软件中注明的公司同在。
 * 本软件及文档享有版权，并受国家版权法及国际协约条款的保护。
 * 您不可以从本软件中去掉其版权声明；并保证为本软件的拷贝（本部或部分）* 复制版权声明。
 * 您同意制止以任何形式非法拷贝本软件及文档。
 * 版权信息参见：
 *      http://www.asoft.cn/licenses
 */

package com.asoft.common.base.web.valid;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.springframework.orm.ObjectRetrievalFailureException;

import com.asoft.common.base.manager.Manager;
import com.asoft.common.base.model.BaseObject;
import com.asoft.common.util.mvc.valid.InvalidParamException;
import com.asoft.common.util.mvc.valid.UserValidator;
import com.asoft.common.util.mvc.valid.ValidatedResult;

/**
 * <p>Title: 用户实现的校验器: 交换pri之前的校验</p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: asoft</p>
 * @ $Author: author $
 * @ $Date: 2005/02/16 01:04:14 $
 * @ $Revision: 1.7 $
 * @ created in 2005-11-14
 *
 */

public class ChangePriValidator extends UserValidator
{
        static Logger logger = Logger.getLogger(ChangePriValidator.class);

        /**
         * 切换pri的校验器
         * @ param: HttpServletRequest request
         * @ param: ValidatedResult vr 校验结果存放器
         * @ param: String[] params 配置参数
         */
        public void validing(HttpServletRequest request,
                             ValidatedResult vr,
                             String[] params)
        {
                logger.info("开始进行交换pri校验");
                if(params.length != 1)
                        throw new InvalidParamException("ChangePriValidator校验器配置错误： <param>manager类路径</param> 必须");
                String sId = request.getParameter("sId");
                String destId = request.getParameter("destId");
                logger.debug("获取manager : " + params[0]);
                Manager manager = (Manager)this.getBean(params[0]);
                // 源记录
                BaseObject sBO;
                try
                {
                        sBO = (BaseObject)manager.get(sId);
                        // 校验成功,执行删除操作
                        logger.debug("sBO 存在");
                        request.setAttribute("sBO",sBO);
                }
                catch(ObjectRetrievalFailureException ofe)
                {
                        // 将错误信息封装给校验结果器
                        logger.debug("输出校验失败信息");
                        vr.setErrMess("sId","源记录已经被删除");
                }
                // 目标记录
                BaseObject destBO;
                try
                {
                        destBO = (BaseObject)manager.get(destId);
                        // 校验成功,执行删除操作
                        logger.debug("destBO 存在");
                        request.setAttribute("destBO",destBO);
                }
                catch(ObjectRetrievalFailureException ofe)
                {
                        // 将错误信息封装给校验结果器
                        logger.debug("输出校验失败信息");
                        vr.setErrMess("destId","目标记录已经被删除");
                }
        }
}
